package br.com.cogerh.sidec.view;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;
import javax.management.Query;

import br.com.cogerh.sidec.model.Diretor;
import br.com.cogerh.sidec.model.Diretoria;
import br.com.cogerh.sidec.model.Pessoa;

@ManagedBean(name = "diretoriaBean")
@SessionScoped
public class DiretoriaBean {

	private Diretoria diretoria;
	private List<Diretoria> listaDiretoria;
	private List<SelectItem> listaDiretoria2; //Select usado no filtro de busca
	private List<SelectItem> listaNomeResponsavel;
	private Integer idDiretoriaSelecionado;
	private List<String> listaStringDiretorias;
	private List<String> listaStringResponsaveis;
	private String nomeDiretoriaSelecionada;
	
	

	public String consultar() {
		populaDiretoriaSelect();
		listar();
		
		return "sucesso";
		
	}

	public String novo() {
		diretoria = new Diretoria();
		diretoria.setDiretor(new Diretor());
		
		populaNomeResponsavel();
		return "sucesso";
	}
	
	
	public String editar(){
		populaNomeResponsavel();

		if(diretoria !=null){
			return "sucesso";
		}
		else{
			return "erro";
		}
	}
	
	public String cancelar(){
		listar();
		return "sucesso";
	}

	public String salvar() {
		DiretoriaRN diretoriaRN = new DiretoriaRN();

		if (diretoria.getId() != null) {
			diretoriaRN.editar(diretoria);
		} else {
			diretoriaRN.salvar(diretoria);
		}
		
		listar();

		return "sucesso";
	}

	public void listar() {
		DiretoriaRN diretoriaRN = new DiretoriaRN();
		listaDiretoria = new ArrayList<Diretoria>();
		listaDiretoria = diretoriaRN.listar();
	}
			
	public String excluir() {

		if (diretoria != null) {
			DiretoriaRN diretoriaRN = new DiretoriaRN();

			diretoriaRN.excluir(diretoria);
			listar();
			return "sucesso";
		} else {
			return "erro";
		}
	}

	public void populaNomeResponsavel(){
		PessoaRN pessoaRN = new PessoaRN();
		listaNomeResponsavel = new ArrayList<SelectItem>();

				
		for(Pessoa resp : pessoaRN.listar()){
			this.listaNomeResponsavel.add(new SelectItem(resp.getId(),resp.getNome()));
		}
		
	}
	

	//Usando AUTO-COMPLETE
	
	//Pagina de Consulta
	public void populaDiretoriaSelect(){
		DiretoriaRN diretoriaRN = new DiretoriaRN();
		listaStringDiretorias = new ArrayList<String>();
		
		for (Diretoria diretoria : diretoriaRN.listar()) {
			listaStringDiretorias.add(diretoria.getNome());
		}
	}

	
	public List<String> complete(String query){
		populaDiretoriaSelect();
		List<String> listaNomeDiretorias = new ArrayList<String>();
		
		for (String  diretoira : listaStringDiretorias) {
			if(diretoira.toLowerCase().contains(query.toLowerCase())){
				listaNomeDiretorias.add(diretoira);
			}
		}
		
		return listaNomeDiretorias;
		
	}
	
	public void listarByFiltros() throws ParseException{
		DiretoriaRN diretoriaRN = new DiretoriaRN();
				
		listaDiretoria = diretoriaRN.listarByParametros(nomeDiretoriaSelecionada);
		nomeDiretoriaSelecionada = "";
	
	}
	
	//Pagina de Cadastro
	public List<Pessoa> completeResponsavel(String query){
		PessoaRN pessoaRN = new PessoaRN();
		List<Pessoa> listaNomeResponsaveis = new ArrayList<Pessoa>();
		
		for (Pessoa  pessoa : pessoaRN.listar()) {
			if (pessoa.getNome().toLowerCase().contains(query.toLowerCase())) {
				listaNomeResponsaveis.add(pessoa);
			}
		}
		
		return listaNomeResponsaveis;
		
	}	
	

	
	
	public Diretoria getDiretoria() {
		return diretoria;
	}

	public void setDiretoria(Diretoria diretoria) {
		this.diretoria = diretoria;
	}

	public List<Diretoria> getListaDiretoria() {
		return listaDiretoria;
	}

	public void setListaDiretoria(List<Diretoria> listaDiretoria) {
		this.listaDiretoria = listaDiretoria;
	}
		
	public List<SelectItem> getListaDiretoria2() {
		return listaDiretoria2;
	}

	public void setListaDiretoria2(List<SelectItem> listaDiretoria2) {
		this.listaDiretoria2 = listaDiretoria2;
	}
	
	public List<SelectItem> getListaNomeResponsavel() {
		return listaNomeResponsavel;
	}

	public void setListaNomeResponsavel(List<SelectItem> listaNomeResponsavel) {
		this.listaNomeResponsavel = listaNomeResponsavel;
	}

	public Integer getIdDiretoriaSelecionado() {
		return idDiretoriaSelecionado;
	}

	public void setIdDiretoriaSelecionado(Integer idDiretoriaSelecionado) {
		this.idDiretoriaSelecionado = idDiretoriaSelecionado;
	}

	public List<String> getListaStringDiretorias() {
		return listaStringDiretorias;
	}

	public void setListaStringDiretorias(List<String> listaStringDiretorias) {
		this.listaStringDiretorias = listaStringDiretorias;
	}

	public String getNomeDiretoriaSelecionada() {
		return nomeDiretoriaSelecionada;
	}

	public void setNomeDiretoriaSelecionada(String nomeDiretoriaSelecionada) {
		this.nomeDiretoriaSelecionada = nomeDiretoriaSelecionada;
	}

	public List<String> getListaStringResponsaveis() {
		return listaStringResponsaveis;
	}

	public void setListaStringResponsaveis(List<String> listaStringResponsaveis) {
		this.listaStringResponsaveis = listaStringResponsaveis;
	}

}
